# -*- coding:utf-8 -*-
# title           :
# description     :
# author          :Python超人/三月三提供
# date            :2024-08-07
# link            :https://gitcode.net/pythoncr/
# python_version  :3.9
# ==============================================================================
from 神笔码靓.神笔库.元素库 import 元素模板
from 神笔码靓.神笔库.神笔绘图板 import 神笔绘图板
from 神笔码靓.神笔库.定义集 import *
from 神笔码靓.神笔库.配置 import *
from 神笔码靓.神笔库.通用工具集 import *
from 神笔码靓.神笔库 import 神笔模板
from 神笔码靓.神笔库.定义集 import *


class 手机外壳神笔模板(神笔模板):
    def 模板ID(self):
        return "手机外壳"

    def 手机立体镶边路径(self, 手机轮廓路径, 手机宽, 手机高, 描边宽度, 缩小数):
        手机立体轮廓路径 = []
        手机中心X = 描边宽度 / 2 + 手机宽 / 2
        手机中心Y = 描边宽度 / 2 + 手机高 / 2

        for 手机轮廓路径点 in 手机轮廓路径[0:9]:
            路径点 = list(手机轮廓路径点)

            if 路径点[0] == "移动":
                x, y = 路径点[1], 路径点[2]
                手机中心X小 = 手机中心X + (x - 手机中心X) - 缩小数
                手机中心X大 = 手机中心X - (手机中心X - x) + 缩小数
                手机中心Y小 = 手机中心Y + (y - 手机中心Y) - 缩小数
                手机中心Y大 = 手机中心Y - (手机中心Y - y) + 缩小数
                if x > 手机中心X:
                    路径点[1] = 手机中心X小
                else:
                    路径点[1] = 手机中心X大
                if y > 手机中心Y:
                    路径点[2] = 手机中心Y小
                else:
                    路径点[2] = 手机中心Y大
            elif 路径点[0] == "垂直线":
                y = 路径点[1]
                手机中心Y小 = 手机中心Y + (y - 手机中心Y) - 缩小数
                手机中心Y大 = 手机中心Y - (手机中心Y - y) + 缩小数
                if y > 手机中心Y:
                    路径点[1] = 手机中心Y小
                else:
                    路径点[1] = 手机中心Y大
            elif 路径点[0] == "水平线":
                x = 路径点[1]
                手机中心X小 = 手机中心X + (x - 手机中心X) - 缩小数
                手机中心X大 = 手机中心X - (手机中心X - x) + 缩小数
                if x > 手机中心X:
                    路径点[1] = 手机中心X小
                else:
                    路径点[1] = 手机中心X大
            elif 路径点[0] == "椭圆弧线":
                flag = 路径点[-3]
                x, y = 路径点[-2], 路径点[-1]
                手机中心X小 = 手机中心X + (x - 手机中心X) - 缩小数
                手机中心X大 = 手机中心X - (手机中心X - x) + 缩小数
                手机中心Y小 = 手机中心Y + (y - 手机中心Y) - 缩小数
                手机中心Y大 = 手机中心Y - (手机中心Y - y) + 缩小数
                if x > 手机中心X:
                    路径点[-2] = 手机中心X小
                else:
                    路径点[-2] = 手机中心X大
                if y > 手机中心Y:
                    路径点[-1] = 手机中心Y小
                else:
                    路径点[-1] = 手机中心Y大
                路径点[1] = 路径点[1] - 缩小数 + 描边宽度
                路径点[2] = 路径点[2] - 缩小数 + 描边宽度

            手机立体轮廓路径.append(tuple(路径点))

        手机立体轮廓路径.append(("闭合",))
        return 手机立体轮廓路径

    def 元素列表(self):
        绘图板 = self.绘图板

        屏幕大小 = self.获取参数("屏幕大小", None)
        if 屏幕大小 is None:
            屏幕宽, 屏幕高 = 屏幕分辨率.我的手机()
        else:
            屏幕宽, 屏幕高 = 屏幕大小

        左右边距 = self.获取参数("左右边距", 50)
        上边距 = self.获取参数("上边距", 180)
        下边距 = self.获取参数("下边距", 80)
        描边宽度 = self.获取参数("描边宽度", 1)
        手机颜色 = self.获取参数("手机颜色", "#163844")

        描边宽度 = 3

        手机高 = 屏幕高 + 上边距 + 下边距 + 描边宽度
        手机宽 = 屏幕宽 + 2 * 左右边距 + 描边宽度

        # 摄像头圆 = x=468, y=76
        元素列表_ = 列表()

        # 外轮廓 = 绘图板.画矩形(x=描边宽度 / 2, y=描边宽度 / 2, 圆角半径=屏幕宽 / 10,
        #               宽=描边宽度 + 屏幕宽 + 左右边距 * 2, 高=描边宽度 + 屏幕高 + 上边距 + 下边距,
        #               描边宽度=描边宽度, 填充颜色="none")
        #
        # 屏幕区域 = 绘图板.画矩形(x=描边宽度 / 2 + 左右边距, y=描边宽度 / 2 + 上边距, 圆角半径=屏幕宽 / 26,
        #                宽=描边宽度 + 屏幕宽, 高=描边宽度 + 屏幕高, 描边宽度=描边宽度)
        x1, y1 = 描边宽度 / 2, 描边宽度 / 2
        w1, h1 = 屏幕宽 + 左右边距 * 2, 屏幕高 + 上边距 + 下边距
        r1 = 屏幕宽 / 10

        x2, y2 = 描边宽度 / 2 + 左右边距, 描边宽度 / 2 + 上边距
        w2, h2 = 屏幕宽, 屏幕高
        # print(屏幕宽, 屏幕高)
        r2 = 屏幕宽 / 26

        cw = 屏幕宽 / 3
        ch = 屏幕宽 / 30

        cx1, cy1 = x2 + (w2 - cw) / 2 + 描边宽度 / 2, y2 + ch
        cx2, cy2 = x2 + w2 - (w2 - cw) / 2 + 描边宽度 / 2, y2 + ch

        crt = r2 / 10
        crb = ch - crt
        手机轮廓路径 = [("移动", x1 + r1, y1),  # 顺时针构建
                  ("水平线", x1 + w1 - r1 + 描边宽度 / 2),
                  ("椭圆弧线", r1, r1, 0, 0, 1, x1 + w1 + 描边宽度 / 2, y1 + r1),
                  ("垂直线", y1 + h1 - r1 + 描边宽度 / 2),
                  ("椭圆弧线", r1, r1, 0, 0, 1, x1 + w1 - r1 + 描边宽度 / 2, y1 + h1 + 描边宽度 / 2),
                  ("水平线", x1 + r1),
                  ("椭圆弧线", r1, r1, 0, 0, 1, x1, y1 + h1 - r1 + 描边宽度 / 2),
                  ("垂直线", y1 + r1),
                  ("椭圆弧线", r1, r1, 0, 0, 1, x1 + r1, y1),

                  ("移动", x2 + r2, y2),  # 逆时针构建
                  ("椭圆弧线", r2, r2, 0, 0, 0, x2, y2 + r2),
                  ("垂直线", y2 + h2 - r2),
                  ("椭圆弧线", r2, r2, 0, 0, 0, x2 + r2, y2 + h2 + 描边宽度 / 2),
                  ("水平线", x2 + w2 - r2),
                  ("椭圆弧线", r2, r2, 0, 0, 0, x2 + w2 + 描边宽度 / 2, y2 + h2 - r2 + 描边宽度 / 2),
                  ("垂直线", y2 + r2),
                  ("椭圆弧线", r2, r2, 0, 0, 0, x2 + w2 - r2 + 描边宽度 / 2, y2),

                  ("水平线", cx2 + crt),
                  # ("垂直线", cy2),
                  ("椭圆弧线", crt, crt, 0, 0, 0, cx2, y2 + crt),
                  ("椭圆弧线", crb, crb, 0, 0, 1, cx2 - crb, cy2),
                  ("水平线", cx1 + crb),
                  ("椭圆弧线", crb, crb, 0, 0, 1, cx1, cy1 - crb),
                  ("椭圆弧线", crt, crt, 0, 0, 0, cx1 - crt, y2),

                  ("闭合",)
                  ]

        轮廓渐变色 = self.绘图板.创建线性渐变色(开始位置=(0, 屏幕高),
                                 结束位置=(屏幕宽, 0),
                                 开始颜色="#eeeeee", 结束颜色="#333333",
                                 开始偏移=0.15, 结束偏移=0.99)

        轮廓 = 绘图板.连线(路径点列表=手机轮廓路径, 描边宽度=描边宽度,
                    填充颜色=手机颜色, 描边颜色=轮廓渐变色).添加到列表(元素列表_)

        # 裁剪对象 = 绘图板.裁剪(裁剪元素_=屏幕区域,被裁元素=外轮廓)
        #
        # 元素列表_.添加元素(外轮廓)
        # 元素列表_.添加元素(屏幕区域)
        # 元素列表_.添加元素(裁剪对象)
        # 缩放 = 0.99
        镶边宽度 = 12
        手机镶边路径 = self.手机立体镶边路径(手机轮廓路径, 手机宽, 手机高, 描边宽度, 缩小数=镶边宽度 / 2 - 描边宽度 / 2)
        手机镶边渐变色 = self.绘图板.创建线性渐变色(开始位置=(屏幕宽, 0),
                                   结束位置=(0, 屏幕高 / 3),
                                   开始颜色=颜色.白色, 结束颜色="#666666",
                                   开始偏移=0.15, 结束偏移=0.6)
        手机镶边 = 绘图板.连线(路径点列表=手机镶边路径, 描边宽度=镶边宽度, 描边颜色=手机镶边渐变色).添加到列表(元素列表_)

        摄像头圆半径 = 20
        听筒宽 = 屏幕宽 / 5
        听筒高 = 摄像头圆半径 * 2

        摄像头x, 摄像头y = 屏幕宽 / 2 - 听筒宽 / 2 + 摄像头圆半径, 上边距 / 1.01
        摄像头圆 = self.绘图板.画圆(x=摄像头x, y=摄像头y, 半径=摄像头圆半径, 填充颜色="#091D23")
        元素列表_.添加元素(摄像头圆)

        摄像头渐变色 = self.绘图板.创建线性渐变色(开始位置=(摄像头x - 摄像头圆半径, 摄像头y + 摄像头圆半径),
                                  结束位置=(摄像头x + 摄像头圆半径, 摄像头y - 摄像头圆半径),
                                  开始颜色=颜色.白色, 结束颜色="#1A3B44",
                                  开始偏移=0.15, 结束偏移=0.6)

        self.绘图板.画圆(x=摄像头x, y=摄像头y, 半径=摄像头圆半径 * 0.75, 描边宽度=2,
                    描边颜色=摄像头渐变色).添加到列表(元素列表_)

        听筒x, 听筒y = 屏幕宽 / 2 + 左右边距 - 听筒宽 / 2 + 描边宽度 / 2, 上边距 / 1.01 - 听筒高 / 2

        听筒网背景 = self.绘图板.画矩形(x=听筒x, y=听筒y, 宽=4 * int(听筒宽 // 4), 高=4 * int(听筒高 // 4), 填充颜色=颜色.黑色)
        听筒网 = self.绘图板.画表格(x=听筒x, y=听筒y, 列宽=4, 行高=4, 行数=int(听筒高 // 4), 列数=int(听筒宽 // 4),
                           描边宽度=1.5, 描边颜色="#091D23")

        听筒轮廓 = 绘图板.画矩形(x=听筒x, y=听筒y, 宽=听筒宽, 高=听筒高, 填充颜色="#091D23",
                       圆角半径=听筒高 / 1.8)  # .添加到列表(元素列表_)
        缩小边距 = 摄像头圆半径 * 0.07

        听筒渐变色 = self.绘图板.创建线性渐变色(开始位置=(听筒x - 听筒高 / 2, 听筒y + 听筒高),
                                 结束位置=(听筒x, 听筒y),
                                 开始颜色=颜色.白色, 结束颜色="#091D23",
                                 开始偏移=0.0, 结束偏移=0.9)

        听筒网元素 = self.绘图板.创建组合(元素列表=[听筒网背景, 听筒网]).添加到列表(元素列表_)

        绘图板.画矩形(x=听筒x + 缩小边距, y=听筒y + 缩小边距, 宽=听筒宽 - 2 * 缩小边距, 高=听筒高 - 2 * +缩小边距,
                描边颜色=听筒渐变色, 描边宽度=3, 圆角半径=听筒高 / 1.8).添加到列表(元素列表_)

        绘图板.裁剪(裁剪元素_=听筒轮廓, 被裁元素=听筒网元素)

        # 话筒 = 绘图板.画矩形(x=屏幕宽 / 2 + 左右边距 - 听筒宽 / 2 + 描边宽度 / 2,
        #              y=上边距 / 2 - 听筒高 / 2, 宽=听筒宽, 高=听筒高, 填充颜色="#091D23", 圆角半径=听筒高 / 1.8)
        # 元素列表_.添加元素(话筒)

        self.设置返回值("屏幕大小", 屏幕大小)
        self.设置返回值("屏幕位置", (左右边距 + 描边宽度 / 2, 上边距 + 描边宽度 / 2))

        return 元素列表_


if __name__ == '__main__':
    左右边距 = 50
    上边距 = 180
    下边距 = 80
    描边宽度 = 2
    手机颜色 = "#163844"

    宽, 高 = 屏幕分辨率.我的手机()
    神笔 = 神笔绘图板(作品文件路径="智能手机.svg", 宽=宽 + 左右边距 * 2 + 描边宽度 * 2, 高=高 + 上边距 + 下边距 + 描边宽度 * 2)
    神笔.神笔模板("手机外壳", 左右边距=左右边距, 上边距=上边距, 下边距=下边距, 描边宽度=描边宽度, 手机颜色=手机颜色).创造元素()
    神笔.完成()
    # https://svgtopng.com/zh/  SVG 转 PNG 滤镜支持
    # 神笔.生成PNG(生成方式=PNG生成方式.cairosvg, 缩放=3) # 不支持滤镜
